home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
-
- extern void bcopy(void *src, void *dst, unsigned long cnt);
-
- #define LEN 40 /* keep this below 255 */
-
- void
- shake (unsigned char *arry)
- {
- int i;
-
- /* copy down - even aligned */
- bcopy (&arry[2], &arry[0], LEN - 2);
- printf("down - even-even\n");
- for (i = 0; i < 16; i++)
- printf("%3d ", arry[i]);
- printf("\n");
-
- /* copy up - even aligned */
- printf("up - even-even\n");
- bcopy (&arry[0], &arry[4], LEN - 4);
- for (i = 0; i < 16; i++)
- printf("%3d ", arry[i]);
- printf("\n");
-
- /* copy down - odd-even aligned */
- printf("down - even-odd\n");
- bcopy (&arry[8], &arry[1], LEN - 8);
- for (i = 0; i < 16; i++)
- printf("%3d ", arry[i]);
- printf("\n");
-
- /* copy up - odd-even aligned */
- printf("up - even-odd\n");
- bcopy (&arry[0], &arry[1], LEN - 1);
- for (i = 0; i < 16; i++)
- printf("%3d ", arry[i]);
- printf("\n");
-
- /* copy down - odd-odd aligned */
- printf("down - odd-odd\n");
- bcopy (&arry[7], &arry[1], LEN - 7);
- for (i = 0; i < 16; i++)
- printf("%3d ", arry[i]);
- printf("\n");
-
- /* copy up - odd-odd aligned */
- printf("up - odd-odd\n");
- bcopy (&arry[1], &arry[3], LEN - 3);
- for (i = 0; i < 16; i++)
- printf("%3d ", arry[i]);
- printf("\n");
- }
-
-
- unsigned char bigo[0x20000];
- unsigned char ahull[LEN + 4];
- unsigned char bhull[LEN + 4];
-
- int
- main(int argc, char **argv)
- {
-
- long i;
- int k;
- unsigned char *arry, *brry;
-
- for (i = 0; i < 0x20000; i++) {
- bigo[i] = i & 0xff;
- }
- /* shift bigo four positions up leaving the last */
- bcopy(&bigo[0], &bigo[4], (0x20000 - 5));
-
- for (i = 4 + 254 ; i < 0x20000 - 5; i += 0x100) {
- if (bigo[i] != 254 || bigo[i + 1] != 255) {
- fprintf(stderr, "discrepancy on position %ld - got %u %u\n",
- i, bigo[i], bigo[i + 1]);
- }
- }
- printf("the last one is %u\n", bigo[0x20000 - 1]);
-
-
- ahull[0] = ahull[1] = ahull[LEN + 2] = ahull[LEN + 3] = 0xff;
- bhull[0] = bhull[1] = bhull[LEN + 2] = bhull[LEN + 3] = 0xff;
- arry = &ahull[2];
- brry = &bhull[2];
-
- for (i = 0; i < LEN; i++) {
- arry[i] = i & 0xff;
- }
-
- /* test copying between disjoint regions */
-
- bcopy(&arry[0], &brry[0], LEN);
- for (i = 0; i < 16; i++)
- printf("%3d ", brry[i]);
- printf("\n");
-
- bcopy(&arry[1], &brry[1], LEN - 1);
- for (i = 0; i < 16; i++)
- printf("%3d ", brry[i]);
- printf("\n");
-
- bcopy(&arry[2], &brry[2], LEN - 2);
- for (i = 0; i < 16; i++)
- printf("%3d ", brry[i]);
- printf("\n");
-
- bcopy(&arry[3], &brry[3], LEN - 3);
- for (i = 0; i < 16; i++)
- printf("%3d ", brry[i]);
- printf("\n");
-
- for (k = 4; k < LEN; k++)
- bcopy(&arry[k], &brry[k], LEN - k);
- for (i = LEN-16 ; i < LEN; i++)
- printf("%3d ", brry[i]);
- printf("\n");
- for (i = 0; i < 16; i++)
- printf("%3d ", brry[i]);
- printf("\n");
-
- printf("*** %3d %3d %3d %3d ***\n",
- ahull[0], ahull[1], ahull[LEN + 2], ahull[LEN + 3]);
-
- /* and now with an overlap */
-
- shake(&arry[0]);
-
- printf("*** %3d %3d %3d %3d ***\n",
- ahull[0], ahull[1], ahull[LEN + 2], ahull[LEN + 3]);
- return 0;
- }
-